const express = require('express');
const path = require('path');
const fs = require('fs');

const app = express();
const PORT = process.env.PORT || process.env.FRONTEND_PORT || 3010;

// 检查必要目录是否存在
const distPath = path.join(__dirname, 'dist');
const publicPath = path.join(__dirname, 'public');
const indexPath = path.join(distPath, 'index.html');

if (!fs.existsSync(distPath)) {
  console.error('❌ 错误：dist目录不存在，请先构建前端项目');
  process.exit(1);
}

if (!fs.existsSync(indexPath)) {
  console.error('❌ 错误：index.html文件不存在');
  process.exit(1);
}

// 设置静态文件目录
app.use(express.static(distPath));
// 添加public文件夹支持（favicon.ico, manifest.json等）
if (fs.existsSync(publicPath)) {
  app.use(express.static(publicPath));
}

// 健康检查端点
app.get('/health', (req, res) => {
  res.json({
    status: 'ok',
    service: 'pph-frontend',
    timestamp: new Date().toISOString(),
    port: PORT
  });
});

// API请求代理到后端（避免CORS问题） - 使用可配置后端地址，默认生产地址
app.use('/api', (req, res) => {
  try {
    // 优先使用环境变量，其次使用 VITE_API_BASE_URL，再次使用默认生产地址
    const envBase = process.env.BACKEND_BASE_URL || process.env.VITE_API_BASE_URL || 'http://127.0.0.1:3011/api';
    // 若包含 /api 后缀，则去掉，得到纯服务地址
    const serviceBase = envBase.endsWith('/api') ? envBase.slice(0, -4) : envBase;
    const backendUrl = `${serviceBase}${req.originalUrl}`;
    res.redirect(302, backendUrl);
  } catch (e) {
    console.error('❌ API代理失败:', e && e.message);
    res.status(500).json({ success: false, error: 'frontend proxy error' });
  }
});

// 处理SPA路由，所有其他请求都返回index.html
app.get('*', (req, res) => {
  // 避免处理静态资源请求
  if (req.path.includes('.')) {
    res.status(404).send('File not found');
    return;
  }
  res.sendFile(indexPath);
});

const server = app.listen(PORT, '0.0.0.0', () => {
  console.log(`✅ PPH前端服务启动成功`);
  console.log(`🌐 访问地址: http://localhost:${PORT}`);
  console.log(`📁 静态文件目录: ${distPath}`);
});

// 错误处理
server.on('error', (error) => {
  if (error.code === 'EADDRINUSE') {
    console.error(`❌ 端口 ${PORT} 已被占用`);
  } else {
    console.error('❌ 服务器错误:', error);
  }
  process.exit(1);
});

// 优雅关闭
const gracefulShutdown = (signal) => {
  console.log(`\n📡 收到${signal}信号，正在优雅关闭前端服务...`);
  server.close(() => {
    console.log('✅ 前端服务已关闭');
    process.exit(0);
  });

  // 强制关闭超时
  setTimeout(() => {
    console.log('⚠️ 强制关闭前端服务');
    process.exit(1);
  }, 5000);
};

process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
process.on('SIGINT', () => gracefulShutdown('SIGINT'));

// 未捕获异常处理
process.on('uncaughtException', (error) => {
  console.error('❌ 未捕获异常:', error);
  process.exit(1);
});

process.on('unhandledRejection', (reason, promise) => {
  console.error('❌ 未处理的Promise拒绝:', reason);
  process.exit(1);
});
